let fmap: 'a, 'b . ('a => 'b) => ('a => 'r) => ('b => 'r)